#ifndef FITTING_MODEL_H
#define FITTING_MODEL_H
#include "Signal.h"
// -------------------------------------------
// C2 = C2(X)
class eq_C2:public MathFunction{
 private:
  // parameters
  int LatticeSize;
 public:
  explicit eq_C2(int i_LatticeSize);
  virtual ~eq_C2();
  virtual double value(const double *x);
  virtual void gradient(const double *x,double *grad);
  virtual bool parameterize(const double *para);
  virtual bool parameterize(int para_ID,double para_val);
};
// ------------------------------------------
// sigma^2 = sigma^2(X)
class eq_sigma2:public MathFunction{
 private:
  int LatticeSize;
 public:
  explicit eq_sigma2(int i_LatticeSize);
  virtual ~eq_sigma2();
  virtual double value(const double *x);
  virtual void gradient(const double *x,double *grad);
  virtual bool parameterize(const double *para);
  virtual bool parameterize(int para_ID, double para_val);
};
// ------------------------------------------
// sigma^2/c_2 = sigma2_over_c2(X)
class eq_sigma2_over_c2: public MathFunction{
 private:
  int LatticeSize;
 public:
  eq_sigma2_over_c2(int i_LatticeSize = 40000);
  virtual ~eq_sigma2_over_c2();
  virtual double value(const double *x);
  virtual void gradient(const double *x,double *grad);
  virtual bool parameterize(const double *para);
  virtual bool parameterize(int para_ID, double para_val);
};
#endif

